﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Fabrica10.Negocios;
using Database;

namespace Tests
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.Clear();
                Console.WriteLine("Digite código de testes:");
                Console.WriteLine("0: Hello World");
                Console.WriteLine("1: Teste de Nota Fiscal/Boleto");
                Console.WriteLine("2: Teste CRUD RH");
                Console.WriteLine("3: Teste Visualizaçao RH");
                Console.WriteLine("4: Teste Folha de Pagamento");
                Console.WriteLine("5: CRUD Departamento");
                Console.WriteLine("quit: sair");

                try
                {
                    switch (Console.ReadLine())
                    {
                        case "0":
                            using (var sc = new Fabrica10ServiceReference.Fabrica10SoapClient())
                            {
                                Console.WriteLine(sc.HelloWorld());
                            }
                            break;
                        case "1":
                            var ctx = new DataClasses1DataContext();
                            //GerarCalculoDespesa calc = new GerarCalculoDespesa();
                            GerarNotaFiscal notafiscal = new GerarNotaFiscal();
                            GerarBoleto boletogenerator = new GerarBoleto();
                            NotificacaoAtendimento notifier = new NotificacaoAtendimento();

                            var medico = (from n in ctx.Funcionarios
                                         where n.Id == 101
                                         select n).Single();

                            Console.WriteLine("Notificando Atendimento do Médico " + medico.Nome + " ao Paciente: 1");
                            notifier.ReceberInicioAtendimento(medico.Id, "1");
                            notifier.ReceberFimAtendimento(medico.Id, "1");
                            
                            //calc.ReceberHorasTrabalhadas(medico.Id, "1", 7);
                            //calc.ReceberHorasTrabalhadas(medico.Id, "1", 2);
                            List<Despesa> desp = notafiscal.getNotaFiscal("1", new DateTime(2010,3,1),DateTime.Now);
                            Console.WriteLine("----Despesas----");
                            foreach (Despesa d in desp)
                            {
                                if (d.Quantidade == 0 && d.PrecoUnitario == 0)
                                {
                                    Console.WriteLine(d.Item);                                
                                }
                                else
                                {
                                    Console.WriteLine("Item: " + d.Item + " Quantidade: " + d.Quantidade + "Preco Unitário" + d.PrecoUnitario);                                
                                }
                                    
                            }
                            Boleto boleto = boletogenerator.GetBoleto("José Roberto", "Banco Itaú", "1", new DateTime(2010, 3, 1), DateTime.Now);
                            Console.WriteLine("----Boleto:----");
                            Console.WriteLine("Nome do Cliente: " + boleto.NomeCliente + " Nome do Banco: " + boleto.NomeBanco + " Num: " + boleto.CodigoAleatorio);
                            Console.WriteLine("Nome da Empresa " + boleto.NomeEmpresa + " Total: " + boleto.TotalCobrado);

                            break;
                        case "2":
                            TesteCRUDrh teste = new TesteCRUDrh();
                            teste.CRUDrh();
                            break;
                        case "3":
                            using (var sc = new Fabrica10ServiceReference.Fabrica10SoapClient())
                            {
                                var funcs = sc.VisualizarFuncionarios();
                                Console.WriteLine("Funcionarios: ");
                                foreach (var item in funcs)
                                {
                                    Console.WriteLine(item.Nome);
                                }
                            }
                            break;
                        case "4":
                            using (var sc = new Fabrica10ServiceReference.Fabrica10SoapClient())
                            {
                                Console.Write("Digite o id do funcionário: ");
                                int idFuncionario = Convert.ToInt32(Console.ReadLine());
                                var fps = sc.VisualizarFolhaPagamento(idFuncionario, new DateTime(2011, 3, 9), new DateTime(2011, 4, 20));
                                Console.WriteLine("Folhas de pagamento de 09/03/2011 a 20/04/2011: ");
                                Console.WriteLine("        DATA         |  VALOR |   NOME  ");
                                foreach (var item in fps)
                                {
                                    Console.WriteLine(item.Data + " |  " + item.TotalPagamento.ToString() + " |  " + sc.GetFuncionario(item.IdFuncionario).Nome);
                                }

                            }
                            break;
                        case "5":
                            GerenciamentoDepartamentos geren = new GerenciamentoDepartamentos();
                            Departamento z = new Departamento();
                            Console.WriteLine("Departamentos Existentes: ");
                            Console.WriteLine("Cadastrando Departamento Teste2");
                            geren.CadastrarDepartamento("Teste2");
                            foreach (Departamento d in geren.ListaDepartamentos())
                            {
                                Console.WriteLine("Nome: " + d.Nome);
                                if (d.Nome == "Teste2")
                                {
                                    z = d;
                                }
                            }
                            Console.WriteLine("Renomeando");
                            geren.AtualizaDepartamento(z.Id, "Teste3");
                            foreach (Departamento d in geren.ListaDepartamentos())
                            {
                                Console.WriteLine("Nome: " + d.Nome);
                            }
                            Console.WriteLine("Apagar");
                            geren.ApagarDepartamento(z.Id);
                            foreach (Departamento d in geren.ListaDepartamentos())
                            {
                                Console.WriteLine("Nome: " + d.Nome);
                            }

                            break;
                        case "quit":
                            return;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("O seguinte erro ocorreu:");
                    Console.WriteLine(e.ToString());
                }
                Console.WriteLine("\nFim do teste...\n");
                Console.ReadKey();
            }
       }
    }
}
